'''
功能：
	1、将  xxx.py 文件的所在目录中的 .cfg、.gpdsc、.ioc、.xml 文件名替换为 与 xxx.py相同的文件名(不包过后缀)
	2、将  MDK-ARM 文件夹下的  xxx.uvoptx、xxx.uvprojx 替换为与 xxx.py相同的文件名(不包过后缀)
	3、将 MDK-ARM 文件夹下的  xxx.uvoptx、xxx.uvprojx 中的 'xxx'字符串替换 为 xxx.py中的‘xxx’字符串
说明：
	1、本程序不支持跨平台
'''

import os
import re

'''	获取ios文件的文件名'''
temp_name = ""
dir_list = os.listdir(".")
for name in dir_list:
	if ".ioc" in name:
		temp_name = (re.search("\w+[.]", name).group())[:-1]
'''	'''

old_proname = temp_name  # 	原始项目名称
py_fn = (re.search(r"[\\]\w+[.]", __file__).group())[1:-1]  # 获取 python 文件名


def rep_cur_fn():	
	"替换指定文件的文件名为此py文件名"
	dn_list = os.listdir(".")  # 获取当前路径的目录名与文件名
	rep_fns = []  # 符合规则的文件名列表
	for l in dn_list:  # 获取出需要替换的文件名
		if ".cfg" in l or ".gpdsc" in l or ".ioc" in l or ".xml" in l:
			if l.count(".") == 1:
				rep_fns.append(l)
	
	for file_name in rep_fns:
		# @1 获取出当前文件的后缀名
		postfix = re.search("[.]\w+", file_name).group()
		# @1 修改文件名
		os.rename(".\\" + file_name, ".\\" + py_fn + postfix)


def rep_mdk_fn():
	os.chdir(os.getcwd() + os.sep + "MDK-ARM")  # 更改当前目录
	# print(os.getcwd())
	# 获取python文件名
	py_fn = (re.search(".+[.]", __file__).group())[:-1]	
	# print(py_fn)
	dir_list = os.listdir(".")  # 获取当前目录与文件名
	fn_list = []  # 用于存放符合条件的文件全名
	# 将符合条件的文件名添加到 fn_list 中
	for fn in dir_list:
		if ".uvguix.Administrator" in fn or \
		   ".uvoptx" in fn or \
		   ".uvprojx" in fn :
			fn_list.append(fn)
	
	path = os.getcwd() + os.sep  # 文件路径名
	for fn in fn_list:
		if (fn.count(".") == 1) or (".uvguix.Administrator" in fn and fn.count(".") == 2):
			postfix = re.search("[.].+", fn).group()  # 获取文件后缀名
			new_all_fn = py_fn + postfix  # 构建新的文件名
			os.rename(path + fn, new_all_fn)  # 更改文件名


def rep_mdk_fd():
	"替换.uvoptx与.uvoprojx文件名与符合要求的字符串"
	
	os.chdir(os.getcwd() + os.sep + "MDK-ARM")
	path = os.getcwd() + os.sep  # 当前目录
	file_path = path + py_fn + ".uvprojx"
	print(file_path)
	
	dir_list = os.listdir(".")  # 获取当前目录名与文件名
	
	# 过滤掉不符合要求的目录名与文件名
	fn_list = []  # 保存文件名列表
	for item in dir_list:
		if ".uvopt" in item or ".uvprojx" in item :  # 找出.uvopt与.uvprojx文件添加到 fn_list
			fn_list.append(item)
	
	old_fn = (re.search("\w+[.]", fn_list[0]).group())[:-1];  	# 截取出文件名字符串
	os.rename(path + old_fn + ".uvoptx", py_fn + ".uvoptx")  	# 更改文件名
	os.rename(path + old_fn + ".uvprojx", py_fn + ".uvprojx")  	# 更改文件名
	
	# 替换掉 xxx.uvprojx 中的内容
	read_buf = ""
	with open(file_path, "r") as r:
		read_buf = r.read().replace(old_proname, py_fn)
		r.close()

	with open(file_path, "w") as w:
		w.write(read_buf)
		w.close()
	
	# 替换掉 xxx.uvoptx 中的内容
	file_path = path + py_fn + ".uvoptx"
	with open(file_path, "r") as r:
		read_buf = r.read().replace(old_proname, py_fn)
		r.close()
	
	with open(file_path, "w") as w:
		w.write(read_buf)
		w.close()
	
	
if __name__ == '__main__':
	rep_cur_fn()
	rep_mdk_fd()  # 替换文件内容	
	print("end")
